package com.steptime.subject;

import org.junit.Test;

public class SubjectDemo {
    /**
     * 斐波那契数列
     * 古典问题：有一对兔子，从出生后第3个月起每个月都生一对兔子，
     * 小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，
     * 问每个月的兔子总数为多少？
     */
    @Test
    public void one() {
        System.out.println("第1个月的兔子对数:    1");
        System.out.println("第2个月的兔子对数:    1");
        int f1 = 1, f2 = 1, f, M = 24;
        for (int i = 3; i <= M; i++) {
            f = f2;
            f2 = f1 + f2;
            f1 = f;
            System.out.println("第" + i + "个月的兔子对数: " + f2);
        }
    }

    /**
     * 判断101-200之间有多少个素数，并输出所有素数。
     * 程序分析：判断素数的方法：用一个数分别去除2到sqrt(这个数)，如果能被整除， 则表明此数不是素数，反之是素数。  
     */
    @Test
    public void two() {
        for (int i = 101; i < 200; i++) {
            boolean b = false;
            for (int j = 2; j < Math.sqrt(i); j++) {
                if (i % j == 0) {
                    b = false;
                    break;
                } else {
                    b = true;
                }
            }
            if (b) {
                System.out.println(i);
            }

        }
    }

    /**
     * 题目：打印出所有的 "水仙花数 "，所谓 "水仙花数 "是指一个三位数，
     * 其各位数字立方和等于该数本身。例如：153是一个 "水仙花数 "，
     * 因为153=1的三次方＋5的三次方＋3的三次方。 
     */
    @Test
    public void three() {
        for (int i = 100; i < 1000; i++) {
            int one = i/100;
            int two = i%100/10;
            int three = i%10;
            if (i == (Math.pow(one,3) + Math.pow(two,3)  + Math.pow(three,3))) {
                System.out.println(i);
            }

        }
    }



    @Test
    public void sqrt() {
        System.out.println(Math.sqrt(9));
    }
}
